package com.xunk.system.service;

import com.xunk.common.core.domain.UploadFile;
import com.xunk.system.domain.SysMatterLog;
import com.xunk.system.domain.SysTenement;
import com.xunk.system.domain.SysTenementDetail;
import com.xunk.system.domain.SysVisitorDetailLog;
import com.xunk.system.vo.BillSummaryDataVO;
import com.xunk.system.vo.VisitLogReqParamVO;
import com.xunk.system.vo.hsh.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

/**
 * 社区物业Service接口
 * 
 * @author ruoyi
 * @date 2021-03-18
 */
public interface ISysTenementService 
{
    /**
     * 查询社区物业
     * 
     * @param id 社区物业ID
     * @return 社区物业
     */
    public SysTenement selectSysTenementById(Long id);

    /**
     * 查询社区物业列表
     * 
     * @param sysTenement 社区物业
     * @return 社区物业集合
     */
    public List<SysTenementDetail> selectSysTenementList(SysTenementDetail sysTenement);

    /**
     * 新增社区物业
     * 
     * @param sysTenement 社区物业
     * @return 结果
     */
    public int insertSysTenement(SysTenement sysTenement);

    /**
     * 修改社区物业
     * 
     * @param sysTenement 社区物业
     * @return 结果
     */
    public int updateSysTenement(SysTenement sysTenement);

    /**
     * 批量删除社区物业
     * 
     * @param ids 需要删除的社区物业ID
     * @return 结果
     */
    public int deleteSysTenementByIds(Long[] ids);

    /**
     * 删除社区物业信息
     * 
     * @param id 社区物业ID
     * @return 结果
     */
    public int deleteSysTenementById(Long id);

    /**
     *  对接物业系统 - 登录物业系统
     * @param homeId    家庭id
     * @return  登录之后返回交互的token
     */
    void loginTenement(Long homeId);

    /**
     *  获取报事报修类型及对应编码
     * @return 报事报修类型
     */
    List<HshMatterTypeResVO> getMatterType();

    /**
     *  提示报事报修
     * @param vo 提交内容
     */
    void doSubmitMatter(HshMatterSubmitVO vo);

    /**
     *  获取保修进度和详细情况
     *
     * @param homeId    家庭id
     * @param id 保修id
     * @return
     */
    HshMatterDetailVO getMatterDetail(Long homeId, String id);
    /**
     *  获取社区公告信息
     * @param homeId    家庭id
     * @param current   当前也是
     * @param size      一页大小
     * @return  社区公告列表
     */
    HshPageVo<HshNoticeVo> getTenementNotice(Long homeId, Integer current, Integer size);

    /**
     *  生成访客通行证的二维码信息
     * @param detailVO  访客具体信息
     * @return 二维码信息
     */
    String createVisitorCode(HshVisitorDetailVO detailVO);

    /**
     *  获取该用户名下所有房产
     * @param homeId    房屋id
     * @return  所有房产信息
     */
    List<HshHouseInfoVO> getHouses(Long homeId);

    /**
     *  获取账单
     * @param homeId   房屋id
     * @param pageNum
     * @return  账单信息
     */
    BillSummaryDataVO getFeeBill(Long homeId,Integer pageNum);

    /**
     *  获取报事报修历史记录
     * @param homeId 家庭id
     * @param reqVO  请求参数
     * @return  历史记录
     */
    HshPageVo<HshMatterHistoryVo> getMatterHis(Long homeId, HshMatterHistoryReqVO reqVO);

    /**
     *  获取本地报事报修历史列表
     * @param matterLog 筛选条件
     * @return
     */
    List<SysMatterLog> getMatterLog(SysMatterLog matterLog);

    /**
     *  管理员后台获取访客记录
     * @param paramVO 筛选条件
     * @return
     */
    List<SysVisitorDetailLog> getVisitLog(VisitLogReqParamVO paramVO);

    /**
     * 批量删除访客记录
     * @param ids ids
     */
    void deleteVisitLog(Long[] ids);

    /**
     *  删除报事报修记录
     * @param ids ids
     */
    void deleteMatterLog(Long[] ids);

    List<UploadFile> uploadFile(MultipartFile[] files) throws IOException;
}
